package config

// 通过该文件获取 配置文件信息
import (
	"fmt"
	"github.com/fsnotify/fsnotify"
	"github.com/spf13/viper"
	"shopstar/config"
)

func Viper(config *config.Config, ConfigFile string) *viper.Viper {
	// 创建viper 配置文件的处理器
	v := viper.New()            // 可以自动的检测配置文件的变化而更新配置信息
	v.SetConfigFile(ConfigFile) // 设置配置文件
	v.SetConfigType("yml")      // 设置配置文件类型
	// 通过viper读取配置文件
	if err := v.ReadInConfig(); err != nil {
		panic(fmt.Errorf("Fatel error config file : %s \n", err))
	}
	// 设置配置文件的热加载
	v.WatchConfig()
	// 定义一个用于解析配置文件信息到global.config结构体中的方法
	cfg := func(v *viper.Viper) {
		if err := v.Unmarshal(config); err != nil {
			panic(fmt.Errorf("Fatel error config parse : %s \n", err))
		}
	}
	// 在配置文件改变的时候触发的函数
	v.OnConfigChange(func(e fsnotify.Event) {
		fmt.Println("Config file changed:", e.Name)
		cfg(v)
		//fmt.Println(global.Config.Sms, global.Config.Smsbao)
	})

	cfg(v)
	return v
}
